package es.uned.ii.si3.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import es.uned.ii.si3.model.Centro;


public class CentroDAOImpl implements CentroDAO {
	
	private static Logger log = Logger.getLogger(CentroDAOImpl.class);

	
	public CentroDAOImpl() {
		
	}
	
	/*
	 *   Devuelve una lista de todos los centros disponibles 
	 *   */
	public List<Centro> getAllCentros() {
		Connection conn = ConnectionFactory.getConnection();
		List<Centro> listaCentros = new ArrayList<Centro>();
		PreparedStatement ptmt = null;
		ResultSet resultado = null;
		
		try {
			ptmt = conn.prepareStatement("SELECT * FROM centros;");
			resultado = ptmt.executeQuery();
			
			while (resultado.next()){
				Centro centro = new Centro();
				centro.setIdCentro(resultado.getInt("idCentro"));
				centro.setDescripcion(resultado.getString("descripcion"));
				
				listaCentros.add(centro);
			}
		} catch (Exception e) {
			listaCentros = null;
		} finally {
			try {
				resultado.close();
				resultado = null;
			} catch (Exception e) { }
			
			try {
				ptmt.close();
				ptmt = null; 
			} catch (Exception e) { }
		}
		ConnectionFactory.release(conn);
		return listaCentros;
	}

	public Centro getCentroById(int idCentro) throws SQLException {

		Connection conn = ConnectionFactory.getConnection();
		PreparedStatement ptmt = null;
		ResultSet resultado = null;
		Centro centro = null;
		log.debug("CentroDAOImpl::getCentroByPrimaryKey: Vamos a obtener un centro por su identificador: " + idCentro);

		try {
			ptmt = conn.prepareStatement("select * from centros where `idCentro` =?;");
			ptmt.setInt(1, idCentro);

			resultado = ptmt.executeQuery();

			if (resultado.next()) {
				centro = new Centro();
				centro.setIdCentro(resultado.getInt("idCentro"));
				centro.setDescripcion(resultado.getString("descripcion"));
			}
		} catch (Exception e){
			log.error(e);
			e.printStackTrace();
			centro = null;
		} finally {
			try {
				resultado.close();
				resultado = null;
			} catch (Exception e) { }
			
			try {
				ptmt.close();
				ptmt = null; 
			} catch (Exception e) { }
		}
		ConnectionFactory.release(conn);
		return centro;
	}


}
